//TODO no esta andando bien la eliminacion de las imagenes, hay veces que falla
//TODO No se ve el volver, lo tapa el breadlist
function GaleriaCasosCtrl($scope, $rootScope, $location) {
    
    
    $scope.modoAdminEdit = false; // Si es admin y esta editando la galeria
        //
    $scope.casoSelec = null;
    $scope.casosOriginal = [];
    $scope.casosList = [];
    
    
    //$scope.backupCasosList = [];
    //$scope.backupCasos = [];
    //$scope.indiceBackup = -1; 
    //BREADCRUMB
    $scope.breadList = [];
    
    $scope.galCentralInstance = null;
    
    
    // POPUP ALTA DE NUEVO ITEM DE LA GALERIA
    $scope.idImagenes = '';//TODO Chequear cuando se limpia esta variable
    $scope.casoNew = {};    
    $scope.modoEdit = false;
    $scope.casoEditBkp = 0;
    $scope.casoEditIndice = 0;
    $scope.galPopAltaGaleriaInstance = null;
    
    //ELIMINACION
    $scope.casoDeleteIndice = 0;
    
    // Mover casos
    $scope.casoMover = null;
    $scope.moverHijos = false; // Si es false, mueve el caso completo
    
    
    
    $scope.init = function () {   
        if ($rootScope.esOdontologo && !$rootScope.suscripcionB && !$rootScope.suscripcionP){          
            $rootScope.sugerirSusBasica = true;
            $location.path('miCuenta');
            return;
        } 
    
        menuMarcarSeleccion('#lnkGaleria');
        $scope.showGaleria(null);//Muestra la galeria vacia
        /*$('.iphone-toggle').iphoneStyle({
          checkedLabel: 'SI',
          uncheckedLabel: 'NO'
        });*/
    
    
        galeriaCasosSrv.initGaleriaCasos($scope.returnInitGaleriaCasos);
    }
    
    $scope.returnInitGaleriaCasos = function (data) {
        //armarComboUsuarios("#selUsuario", $scope.listaUsuarios);
        //armarComboEstados("#selEstado", $scope.listaEstados);
        $scope.updateListaCasos(data['LISTA_CASOS']);
        $scope.casosList = $scope.casosOriginal;
        $scope.$apply();
    }
    
    
    
    // Devuelve la ruta de la imagen para mostrar como thumbnail de cada caso.
    $scope.rutaImagenCaso = function (caso) {
        if (caso.nombreImagenPri != null) 
            return urlImagen(caso.nombreImagenPri); //TODO a�adir parametro para que haga el resize
        else
            return $rootScope.rutaImgDefault; 
    }  
    
    $scope.rutaImagenCasoTh = function (caso) {
        if (caso.nombreImagenPri != null) 
            return urlImagenTh(caso.nombreImagenPri); 
        else
            return $rootScope.rutaImgDefault; 
    }    
    
    $scope.showGaleria = function (caso) {
           
           if ($scope.galCentralInstance != null)
              $scope.galCentralInstance.destroy(); 
            $('#galCentral').html('');
              
            var data = [];
            if (caso != null && caso.listaImagenes != null && caso.listaImagenes.length > 0){
                var i = 0;
                for (i = 0; i < caso.listaImagenes.length; i++){                                                      
                      data.push({thumb: urlImagenTh(caso.listaImagenes[i].nombre), image: urlImagen(caso.listaImagenes[i].nombre)});                     //, title: caso.nombre, description: caso.descripcion
                }        
            }else{
                data.push({thumb: $rootScope.rutaImgDefault, image:'img/sos-img/img_dummy_casos.jpg', big: 'img/sos-img/img_dummy_casos.jpg'});
            }
            
            Galleria.loadTheme('js/galleria.classic.min.js');
            // Galleria.loadTheme('js/g.min.js');
            Galleria.configure( { lightbox : true }); 
            
            
            //, layer: '<video width="445" height="250" controls> <source src="http://localhost:8082/odondata/test/big_buck_bunny.mp4" type="video/mp4"> <p>Your browser does not support H.264/MP4.</p> </video>' 
            //Galleria.configure( { lightbox : false });
            Galleria.run('#galCentral', {
            dataSource: data,
            extend: function() {
                $scope.galCentralInstance = this; // "this" is the gallery instance            
            }
            });                
            $('#galCentral').show();
    
    }
    
    
    $scope.updateListaCasos = function (lista) {
        $scope.casosOriginal = [];
        if (lista != null) {
            $.each(lista, function (index, nodo) {
                if (nodo === undefined)
                    ;
                else 
                    $scope.casosOriginal.push(nodo);
            });
        }        
    }
    
    // MOVER CASOS
    $scope.cmdMoverCaso = function (caso) {
        $scope.casoMover = caso;
        $scope.moverHijos = false;        
        notificarInfoMsj('Navegue hacia el caso destino y presione el boton "Pegar Aqui"');
    }
    
    $scope.cmdMoverCasoTodos = function () {
        $scope.casoMover = $scope.casoSelec;
        $scope.moverHijos = true; 
        notificarInfoMsj('Navegue hacia el caso destino y presione el boton "Pegar Aqui"');
    }
    
    $scope.cmdPegarCaso = function () {                
        var idCasoDestino = 0;
        if ($scope.casoSelec != null) // Si esta en la raiz
            idCasoDestino = $scope.casoSelec.id;
        
        var parametros = {
            idCasoMover  : $scope.casoMover.id,
            idCasoDestino: idCasoDestino,
            moverHijos   : $scope.moverHijos
        };
        
        galeriaCasosSrv.moverCaso(parametros, $scope.returnMoverCaso);
    }
    
    $scope.returnMoverCaso = function (data) {
        // Devuelve la lista de casos actualizada y marca el caso seleccionado.
        
        if (notificarError(data))
            return;
        
        $scope.casoMover = null;
        $scope.moverHijos = false;
        $scope.updateListaCasos(data['LISTA_CASOS']);
        if ($scope.casoSelec != null) // Esta en la raiz
            $scope.navegarACaso($scope.casoSelec.id); 
        else
            $scope.casosList = $scope.casosOriginal; // Actualiza la lista de casos    
        $scope.$apply();                      
    }
    
     $scope.labelMover = function () {
        if ($scope.casoMover == null) return '';
        if ($scope.moverHijos)
            return 'Pegar los subcasos de: ' + $scope.casoMover.nombre;
        else
            return 'Pegar el caso: ' + $scope.casoMover.nombre;
    }
    
    
    
    $scope.casoTmp = null; 
    $scope.navegarACaso = function (idCaso) {
        // Busca el caso, lo marca como seleccionado y arma toda la ruta hasta ese caso
        
        $scope.buscarCaso($scope.casosOriginal, idCaso);
        
        if ($scope.casoSelec != null){ // Encontro el caso, 
            $scope.casosList = $scope.casoSelec.listaCasos;
            // Armar la ruta hasta el caso.
            $scope.breadList = [];
            $scope.breadList.unshift($scope.casoSelec);
            $scope.buscarCaso2($scope.casosOriginal, $scope.casoSelec.idPadre);
   
            while ($scope.casoTmp != null){
                $scope.breadList.unshift($scope.casoTmp);
                var idPadre = $scope.casoTmp.idPadre;
                $scope.casoTmp = null;
                $scope.buscarCaso2($scope.casosOriginal, idPadre);
            }                        
        }        
    }
    
    $scope.buscarCaso2 = function(lista, idCaso) {
        if (lista != null){                          
            $.each(lista, function (index, nodo) {
                if (nodo === undefined)
                    ;
                else{
                    if (nodo.id == idCaso){  
                        $scope.casoTmp = nodo;
                        return;
                    }else{
                         $scope.buscarCaso2(nodo.listaCasos, idCaso);                        
                    }
                } 
                    
            });           
        }         
    }
    
    $scope.buscarCaso = function(lista, idCaso) {
      if (lista != null){                          
            $.each(lista, function (index, nodo) {
                if (nodo === undefined)
                    ;
                else{
                    if (nodo.id == idCaso){
                        $scope.casoSelec = nodo;
                        return;
                    }else{
                         $scope.buscarCaso(nodo.listaCasos, idCaso);                        
                    }
                } 
                    
            });           
        }    
    }
    
    
    
    
    $scope.cmdAltaCaso = function (caso){ 
          $scope.idImagenes = '';
          $scope.casoNew = {};
          $scope.modoEdit = false;
   
          $('#popAltaGaleria').modal('show');        
          $scope.activarUpload();        
    }
    
    $scope.cmdModificarCaso = function (caso, indice){  
          $scope.idImagenes = '';
          $scope.casoEditIndice = indice;
          $scope.casoNew.titulo = caso.nombre;
          $scope.casoNew.descripcion = caso.descripcion;
          $scope.casoNew.idCaso = caso.id;
          $scope.casoNew.listaImagenes = caso.listaImagenes;
          $scope.modoEdit = true;
          $scope.casoEditBkp = jQuery.extend(true, {}, caso); // Clona el objeto      
          
          $( "#divImagenesOrig" ).sortable();         //Activa el ordenamiento de las imagenes
          $( "#divImagenesOrig" ).disableSelection();
          
          $('#popAltaGaleria').modal('show');        
          $scope.activarUpload();
    }
    
    $scope.cmdEliminarCaso = function (caso, indice){  
          $scope.casoDeleteIndice = indice;
          galeriaCasosSrv.eliminarCaso(caso.id, $scope.returnEliminarCaso);                   
    }
    
    $scope.returnEliminarCaso= function (data){  
        //TODO verificar como quitarlo de la lista en pantalla
        // Elimina el caso que se quito de la pantalla        
        $scope.casosList.splice($scope.casoDeleteIndice, 1);
        $scope.$apply();      
    }
    
    $scope.borrarImagen = function(img, indice){
        $scope.casoEditBkp.listaImagenes.splice(indice, 1);
    }
    
    $scope.cmdGuardarAltaCaso= function (){    
        $scope.casoNew.idImagenes = $scope.idImagenes;
       
        
        
        if ($scope.modoEdit){     
              
              // Imagenes ordenadas
              var orden = 0;
              var idImagenesOrdenadas = '';
              $('#divImagenesOrig').children('.childImg').each(function () {
                  orden++;
                  idImagenesOrdenadas += $(this).attr('id-img') + ';';
              });
              $scope.casoNew.imagenesOrdenadas = idImagenesOrdenadas; 
        
              if ($scope.casoEditBkp.listaImagenes == null || $scope.casoEditBkp.listaImagenes.length == 0){
                  $scope.casoNew.imagenesModificadas = '';
              }else{
                  $scope.casoNew.imagenesModificadas = '';
                  var i = 0;
                  for (i = 0; i < $scope.casoEditBkp.listaImagenes.length; i++){
                      $scope.casoNew.imagenesModificadas += ',' + $scope.casoEditBkp.listaImagenes[i].id + ',';
                  }
              }
        
              galeriaCasosSrv.guardarModificarCaso($scope.casoNew, $scope.returnGuardarModificarCaso);
        }else{
            if ($scope.casoSelec != null){
                $scope.casoNew.idCasoPadre = $scope.casoSelec.id;
            }     
            galeriaCasosSrv.guardarNuevoCaso($scope.casoNew, $scope.returnGuardarNuevoCaso);
        }
        
    }
    //MODIFICACION
    $scope.returnGuardarModificarCaso= function (data){  
        // reemplaza el caso en la posici�n exacta del array
        if ($scope.casoSelec == null){ // Esta parado en la raiz
            data['CASO_EDIT'].listaCasos = $scope.casosList[$scope.casoEditIndice].listaCasos; // Conserva la lista de casos hijos
            $scope.casosList[$scope.casoEditIndice] = data['CASO_EDIT'];
        }else{        
            data['CASO_EDIT'].listaCasos = $scope.casoSelec.listaCasos[$scope.casoEditIndice].listaCasos; // Conserva la lista de casos hijos
            alert ($scope.casoEditIndice);
            alert ($scope.casoSelec);
            alert ($scope.casoSelec.listaCasos);
            $scope.casoSelec.listaCasos[$scope.casoEditIndice] = data['CASO_EDIT'];            
        }
        $scope.$apply();        
    }
    // ALTA 
    $scope.returnGuardarNuevoCaso= function (data){    
        if ($scope.casoSelec == null){ // Esta parado en la raiz            
            $scope.casosList.push(data['CASO_NEW']);            
        }else{        
             $scope.casoSelec.listaCasos.push(data['CASO_NEW']);
             $scope.casosList = $scope.casoSelec.listaCasos;
        } 
        $scope.$apply();        
    }
    
  
    
    $scope.activarUpload = function () {
        cargarUpload('uploader', 'finalizoCargaCasos', 'N');
        //function activarUpload(){
        /*$("#uploader2").pluploadQueue( {
            // General settings
            runtimes : 'flash', 
            //url : 'fileupload',    
            url : 'http://localhost:8888/uploadimg', 
            //url : 'http://qabacoimages.appspot.com/uploadimg',    
            max_file_size : '10mb', 
            //chunk_size : '1mb',
            unique_names : true, browse_button : 'Agregar Fotos', 
            // Resize images on clientside if we can
            resize :  {
                width : 800, height : 600, quality : 90
            },

            // Specify what files to browse for
            filters : [
            {
                title : "Image files", extensions : "jpg,gif,png"
            },
            {
                title : "Zip files", extensions : "zip"
            }
            ], 

            // Flash settings
            flash_swf_url : 'js/plupload.flash.swf', 

            // thumbnails
            thumb :  {
                width : 100, height : 100, quality : 90
            },
            // Silverlight settings
            //silverlight_xap_url : '/plupload/js/plupload.silverlight.xap'
            init :  {
                FileUploaded : function (up, file, info) {
                    // Called when a file has finished uploading
                    //alert('[FileUploaded] File:', file, "Info:", info);
                    var resp = jQuery.parseJSON(info.response);
                    //$scope.idImagenes.push(resp.id);
                    $scope.idImagenes = $scope.idImagenes + "," + resp.id;                                       
                }
            }

        });*/
        
    }
    
    $scope.finalizoUpload = function (nombreArchivo) {        
        $scope.idImagenes = nombreArchivo; //$scope.idImagenes + "," + resp.id;
    }
    
    $scope.clickCaso = function (caso){
       // if (caso.listaCasos == null || caso.listaCasos.length == 0 && !$scope.modoAdminEdit)
         //   return;
            
        $scope.breadList.push(caso);        
        $scope.casoSelec = caso;  
        
        if (caso.listaCasos == null || caso.listaCasos.length == 0){
            $scope.casosList = [];
        }else{
            $scope.casosList = caso.listaCasos;    
        }        
        
        $scope.showGaleria(caso); // Para que vaya mostrando la galeria mientras navegashowGaleria(caso); // Para que vaya mostrando la galeria mientras navega
    }
    
    
    /*$scope.clickSiguiente = function (caso){
        $scope.casoSelec = caso;                                        
            
        $scope.indiceBackup = $scope.indiceBackup + 1;       
        $scope.backupCasosList[$scope.indiceBackup] = $scope.casosList;        
        $scope.backupCasos[$scope.indiceBackup] = caso;        
        
        if (caso.listaCasos == null || caso.listaCasos.length == 0){
            $scope.casosList = [];
        }else{
            $scope.casosList = caso.listaCasos;    
        }*/
    
    $scope.breadLabel= function(caso){      
        if (caso.nombre != null)
            return truncate(caso.nombre);
        return '';
    }
    
    $scope.volver = function (){        
       // $scope.indiceBackup = $scope.indiceBackup - 1;
        //alert($scope.indiceBackup);
        //$scope.casosList = $scope.backupCasosList[$scope.indiceBackup];    
        //$scope.indiceBackup = $scope.indiceBackup - 1;
        
        
        $scope.breadList.pop();                
        $scope.casoSelec = $scope.breadList[$scope.breadList.length - 1];        
        
        if ($scope.casoSelec == null)
            $scope.casosList = $scope.casosOriginal;
        else{        
            if ($scope.casoSelec.listaCasos == null || $scope.casoSelec.listaCasos.length == 0){
                $scope.casosList = [];
            }else{
                $scope.casosList = $scope.casoSelec.listaCasos;    
            }
        }    
        
        $scope.showGaleria($scope.casoSelec);
    }
    
    $scope.breadClick = function (caso, indice){     
       $scope.casoSelec = caso;
       $scope.breadList.splice(indice + 1, $scope.breadList.length);             
       if (caso.listaCasos == null || caso.listaCasos.length == 0){
            $scope.casosList = [];
        }else{
            $scope.casosList = caso.listaCasos;    
        }       
    }
    
     $scope.estaChequeado = function () {
          if ($scope.modoAdminEdit)
            return 'checked';
          else
            return '';
     }
    
    /*$scope.verGaleriaImg = function (caso) {
        //Consultar la lista de imagenes colocar los links de la imagen en grande y peque�a
        //TODO tener la lista ya consultada desde el server???
        
         $scope.clickCaso(caso);
        
        
        if (caso.listaImagenes == null || caso.listaImagenes.length == 0){
            return;
        }
        
       
        
        //condet.showGaleria = true;
        //$scope.consultasDet[2].showGaleria = true;
        // $scope.$apply()
        
        if ($scope.galInstance != null)
          $scope.galInstance.destroy();
        
       //try{ Galleria } catch(error){alert(error);}
        $('#galleria').html('');
        
        
        
        
        if (caso.listaImagenes != null && caso.listaImagenes.length > 0){
            var i = 0;
            for (i = 0; i < caso.listaImagenes.length; i++){                                                      
                  var aLink = document.createElement("a");
                  var imgC = document.createElement("img");       
                  $(imgC).attr("src", urlImagen(caso.listaImagenes[i].codImagen));  
                  $(imgC).attr("data-big", urlImagen(caso.listaImagenes[i].codImagen));
                  if (caso.listaImagenes[i].titulo != null)                  
                      $(imgC).attr("data-title", caso.listaImagenes[i].titulo);
                  if (caso.listaImagenes[i].descripcion != null)                  
                      $(imgC).attr("data-description", caso.listaImagenes[i].descripcion);
                  //$(imgC).attr("data-description", urlImagen(caso.listaImagenes[i].codImagen));                                 
                  
                  $(aLink).append(imgC);        
                  $('#galleria').append(aLink);
            }        
        }
        
        

        Galleria.loadTheme('js/galleria.classic.min.js');
        Galleria.configure( { lightbox : true });
        
        
        Galleria.run('#galleria', {
        extend: function() {
            $scope.galInstance = this; // "this" is the gallery instance            
        }
        });
        
      
        $('#galleria' ).show();
      
    };        */
}

function finalizoCargaCasos(nombreArchivo) {
     obtenerScope('divGaleriaCasos').finalizoUpload(nombreArchivo);
}